package demo;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

class Alg<E extends Comparable<E>>{   //这语法是给E一个边界

    // < E extends N >  这个语法就叫做泛型的上界 ， 代表将来指定的参数类型一定是实现了这个接口的

    /*public int Findmax(int[] array){
        int max = array[0];
        for(int i = 1; i<array.length;i++){
            if(max<array[i]){
               max = array[i];
            }
        }
        return max;
    }*/

    //改成任意类型的
     public E Findmax(E[] array){
        E max = array[0];
        //Object[] objects = new Object[array.length];
        for(int i = 1; i<array.length;i++){
           // if(max<array[i])  //这个是错误的
            //需要搭建一个接口

            if(max.compareTo(array[i])<0){
               max = array[i];
            }
        }
        return max;
    }
}

class A<E extends Number>{

}

class Alg2{
    public<E extends Comparable<E>> E Findmax(E[] array){    //泛型方法,给这个方法实现指定类型
        E max = array[0];
        //Object[] objects = new Object[array.length];
        for(int i = 1; i<array.length;i++){
            // if(max<array[i])  //这个是错误的
            //需要搭建一个接口

            if(max.compareTo(array[i])<0){
                max = array[i];
            }
        }
        return max;
    }
}


class Alg3{
    public static <E extends Comparable<E>>  E Findmax(E[] array){    //泛型方法,给这个方法实现指定类型
        E max = array[0];
        //Object[] objects = new Object[array.length];
        for(int i = 1; i<array.length;i++){
            // if(max<array[i])  //这个是错误的
            //需要搭建一个接口

            if(max.compareTo(array[i])<0){
                max = array[i];
            }
        }
        return max;
    }

}
public class Test2 {

    public static void main(String[] args) {
        //有了泛型方法，也可以不实例化对象,使用静态方法
        Integer[] integers = {1,2,3,4,5,6,7,8,9,10};
        Integer val = Alg3.<Integer>Findmax(integers);  //<Integer>这个是可以省略的，会根据integers来判断类型
        System.out.println(val);
    }
    public static void main3(String[] args) {
        Alg2 alg2 = new Alg2();
        Integer[] integers = {1,2,3,4,5,6,7,8,9,10};
        Integer val = alg2.<Integer>Findmax(integers);  //<Integer>这个是可以省略的，会根据integers来判断类型
        System.out.println(val);
    }
    public static void main2(String[] args) {
        A<Number> a = new A<>();
        A<Integer> a1 = new A<>();
        A<Double> a2 = new A<>();
        // 查阅Number的子类


    }
    public static void main1(String[] args) {
        //实现一个泛型类，在泛型类里面求得数组的最大值
        Alg<Integer> alg = new Alg<>();
        Integer[] integers = {1,2,3,4,5,6,7,8,9,10};
        Integer val = alg.Findmax(integers);
        System.out.println(val);
    }
}
